import pygame
import sys

from matplotlib.pyplot import pause
from pygame.examples.scrap_clipboard import screen
from pygame.examples.sprite_texture import group
from pygame.locals import *
from random import randint

#pygame初始化
pygame.init()
pygame.mixer.init()#为音频做准备
pygame.mixer.music.load('背景音乐.mp3')#导入音乐
pygame.mixer.music.set_volume(0.2)#设置音量大小为20%
pygame.mixer.music.play(loops=-1)#设置为-1使音乐循环播放

bg=pygame.image.load('开始背景图.jpg')#设置开始封面
bg_position=bg.get_rect()

#设置游戏窗口大小
size = width,height = 1600,900
screen = pygame.display.set_mode(size)
pygame.display.set_caption('逃离莫塔里的土豆雷')#标题

#主函数
def main():
    class Up(pygame.sprite.Sprite):#定义要选择的游戏人物
        def __init__(self):
            pygame.sprite.Sprite.__init__(self)
            position=100,100#设置初始位置
            self.image=pygame.image.load('角色5.jpg')#加载游戏人物的图像
            self.rect=self.image.get_rect()#获取游戏人物的矩形区域
            self.rect.center=position#把区域设置为默认位置

        #人物的移动方法
        #向左移动
        def move_left(self):
            self.speed=[-5,0]#向左移动速度为5个像素点每秒
            # 如果移动到左边界就将人物固定在左边界
            if self.rect.left<=0:
                self.rect.left=0
            # 否则正常移动
            else:
                self.rect=self.rect.move(self.speed)
        #向右移动
        def move_right(self):
            self.speed=[5,0]
            if self.rect.right>=1600:
                self.rect.right=1600
            else:
                self.rect=self.rect.move(self.speed)
        #向上移动
        def move_up(self):
            self.speed=[0,-5]
            if self.rect.top<=0:
                self.rect.top=0
            else:
                self.rect=self.rect.move(self.speed)
        #向下移动
        def move_down(self):
            self.speed=[0,5]
            if self.rect.bottom<=900:
                self.rect.bottom=900
            else:
                self.rect=self.rect.move(self.speed)

    #定义土豆雷
    class KLT(pygame.sprite.Sprite):
        #定义初始化方法
        def __init__(self):
            pygame.sprite.Sprite.__init__(self)
            y=randint(0,900)#设置y坐标，在0到900随机出现
            position=[1600,y]#初始位置

            self.image=pygame.image.load('土豆雷.jpg')#加载土豆雷图片
            self.rect=self.image.get_rect()#获取土豆雷的矩形区域
            self.rect.center=position#获取土豆雷初始位置

            self.speed=[-3,0]#定义土豆雷的初始速度

        #设置土豆雷移动方法
        def move(self):
            self.rect=self.move(self.speed)

    #对主循环进行初始化
    up=Up()#创建人物实例
    i=0#计数器
    group=pygame.sprite.Group()#经营组管理土豆雷
    state=True#游戏状态设置为True运行中

    #设置主循环
    while state:
        for event in pygame.event.get():#用以获取所有事件
            if event.type==pygame.QUIT:#如果点击关闭按钮
                sys.exit()#退出游戏
        #设置键盘控制
        key=pygame.key.get_pressed()#获取键盘按键状态
        if key[K_LEFT]:#按下左箭头
            up.move_left()#调用人物移动左方法
        if key[K_RIGHT]:
            up.move_right()
        if key[K_UP]:
            up.move_up()
        if key[K_DOWN]:
            up.move_down()

        #设置游戏画面更新，以防出现延后问题
        screen.blit(bg,bg_position)#绘制背景图片
        screen.blit(up.image,up.rect)#绘制人物图片

        #让土豆雷在屏幕右侧随机大量出现
        i=i+1#计数器递增
        if i%10==0:#每十帧出现一只土豆雷
            klt=KLT()
            group.add(klt)#将土豆雷添加到经营组

        #判断功能，当人物碰到土豆雷时游戏结束
        for k in group.sprites():#遍历每一个土豆雷
            k.move()
            screen.blit(k.image,k.rect)#绘制土豆雷形象
            if pygame.sprite.collide_mask(up,k):#检测是否发生碰撞
                state=False
                pause()#调用结束函数



        #设置画面刷新和帧率控制
        pygame.display.flip()#更新显示画面
        pygame.time.Clock().tick(60)#设置帧率为60


#设置游戏结束函数 pause
def pause():
    bg_go=pygame.image.load('莫塔里的大手.jpg')#加载游戏结束图片
    bg_go_pos=bg_go.get_rect()
    size=width,height=1600,900#设置游戏结束窗口
    screen=pygame.display.set_mode(size)
    screen=pygame.display.set_caption('GameOver')#设置游戏结束标题

    #用于控制游戏结束流程
    while True:
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                sys.exit()
            #重玩功能
            if event.type==pygame.KEYDOWN:
                if event.key==pygame.K_ESCAPE:
                    sys.exit()

        img_src=pygame.image.load('重来按钮.jpg')#加载重玩按钮图片
        img_src_pos=img_src.get_rect()
        mouse_press=pygame.mouse.get_pressed()#获取鼠标状态
        mouse_pos=pygame.mouse.get_pos()#获取鼠标位置
        #设置鼠标边界
        left=img_src_pos.left
        right = img_src_pos.right
        top = img_src_pos.top
        bottom = img_src_pos.bottom
        #鼠标触碰重玩按钮时亮度提高
        if left+100<mouse_pos[0]<right+100 and top+185<mouse_pos[1]<bottom+185:
            img_src=pygame.image.load('重来按钮.jpg')
            if mouse_press[0]:
                main()
            #设计按钮位置
            img_src_pos=img_src.get_rect().center=100,185
            screen.blit(bg_go,bg_go_pos)#绘制游戏结束背景
            screen.blit(img_src,img_src_pos)#绘制重玩按钮
            pygame.display.flip()#更新显示
main()














